{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.family']='SimHei'\n",
    "# 这行代码用于解决负号显示问题，在设置字体后可能需要添加\n",
    "plt.rcParams['axes.unicode_minus'] = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 生成模拟数据（正弦波）\n",
    "time_steps = np.linspace(0, 20, 200, dtype=np.float32)\n",
    "data = np.sin(time_steps)\n",
    "data = data.reshape(-1, 1)  # 转成 (序列长度, 特征维度)的形式\n",
    "\n",
    "# 划分训练集和测试集，简单划分，这里仅做示意\n",
    "train_size = int(len(data) * 0.8)\n",
    "train_data = torch.from_numpy(data[:train_size])\n",
    "test_data = torch.from_numpy(data[train_size:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "class GRUModel(nn.Module):\n",
    "    def __init__(self, input_size, hidden_size, num_layers, output_size):\n",
    "        super(GRUModel, self).__init__()\n",
    "        self.hidden_size = hidden_size\n",
    "        self.num_layers = num_layers\n",
    "        self.gru = nn.GRU(input_size, hidden_size, num_layers, batch_first=True)\n",
    "        self.fc = nn.Linear(hidden_size, output_size)\n",
    "\n",
    "    def forward(self, x):\n",
    "        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)\n",
    "        print(h0)\n",
    "        print(h0.shape, x.shape)\n",
    "        out, _ = self.gru(x, h0)\n",
    "        print(out.shape,'\\n', out)\n",
    "        out = self.fc(out[:, -1, :])  # 取最后一个时间步的输出\n",
    "        return out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 超参数设置\n",
    "input_size = 1\n",
    "hidden_size = 32\n",
    "num_layers = 1\n",
    "output_size = 1\n",
    "learning_rate = 0.0001\n",
    "num_epochs = 100\n",
    "\n",
    "model = GRUModel(input_size, hidden_size, num_layers, output_size)\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
      "          0., 0., 0., 0., 0., 0., 0., 0., 0.]]])\n",
      "torch.Size([1, 1, 32]) torch.Size([1, 1, 1])\n",
      "torch.Size([1, 1, 32]) \n",
      " tensor([[[-0.0296,  0.0744, -0.0334, -0.0754, -0.0538, -0.0090, -0.0439,\n",
      "          -0.0248,  0.0203,  0.1030, -0.0115,  0.0734, -0.0010, -0.0679,\n",
      "          -0.0876, -0.0120,  0.0636,  0.0652,  0.0040, -0.0346,  0.0211,\n",
      "           0.0411,  0.0032, -0.0059,  0.0008,  0.0186,  0.0336,  0.0051,\n",
      "          -0.0046,  0.0359,  0.0747,  0.0151]]], grad_fn=<TransposeBackward1>)\n",
      "torch.Size([1, 1])\n"
     ]
    }
   ],
   "source": [
    "inputs = train_data[i].unsqueeze(0).unsqueeze(0)  # (1, 1, 1) 分别对应 (batch_size, seq_length, input_size)\n",
    "targets = train_data[i + 1].unsqueeze(0).unsqueeze(0)        \n",
    "optimizer.zero_grad()\n",
    "outputs = model(inputs)\n",
    "print(outputs.shape)  # (1, 1, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\Program Files (x86)\\pyhon.3.10.11\\lib\\site-packages\\torch\\nn\\modules\\loss.py:535: UserWarning: Using a target size (torch.Size([1, 1, 1])) that is different to the input size (torch.Size([1, 1])). This will likely lead to incorrect results due to broadcasting. Please ensure they have the same size.\n",
      "  return F.mse_loss(input, target, reduction=self.reduction)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 10/100, Loss: 0.009211139753460884\n",
      "Epoch: 20/100, Loss: 0.009204911068081856\n",
      "Epoch: 30/100, Loss: 0.00919897947460413\n",
      "Epoch: 40/100, Loss: 0.009193449281156063\n",
      "Epoch: 50/100, Loss: 0.009188298135995865\n",
      "Epoch: 60/100, Loss: 0.009183775633573532\n",
      "Epoch: 70/100, Loss: 0.009178903885185719\n",
      "Epoch: 80/100, Loss: 0.009174310602247715\n",
      "Epoch: 90/100, Loss: 0.009169860742986202\n",
      "Epoch: 100/100, Loss: 0.009165397845208645\n"
     ]
    }
   ],
   "source": [
    "model.train()  # 训练模式\n",
    "for epoch in range(num_epochs):\n",
    "    for i in range(len(train_data) - 1):\n",
    "        inputs = train_data[i].unsqueeze(0).unsqueeze(0)  # (1, 1, 1) 分别对应 (batch_size, seq_length, input_size)\n",
    "        targets = train_data[i + 1].unsqueeze(0).unsqueeze(0)        \n",
    "        optimizer.zero_grad()\n",
    "        outputs = model(inputs)\n",
    "        loss = criterion(outputs, targets)\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "    if (epoch + 1) % 10 == 0:\n",
    "        print(f'Epoch: {epoch + 1}/{num_epochs}, Loss: {loss.item()}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.eval()    # 设置为测试模式\n",
    "predictions = []\n",
    "with torch.no_grad():\n",
    "    for i in range(len(test_data) - 1):\n",
    "        input_tensor = test_data[i].unsqueeze(0).unsqueeze(0)\n",
    "        output = model(input_tensor)\n",
    "        predictions.append(output.item())\n",
    "\n",
    "# 可视化结果\n",
    "plt.plot(time_steps[train_size:], data[train_size:], label='真实数据', color='blue', linestyle='-')\n",
    "plt.plot(time_steps[train_size + 1:], predictions, label='预测数据', color='red', linestyle='--')\n",
    "plt.xlabel('时间')\n",
    "plt.ylabel('数值')\n",
    "plt.title('GRU模型预测')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
